
import ImEnum from '../enums/index.js'
import config from "../../../build/config";

const SocketApi = {}
SocketApi.socketTask = {}

/**
 * im 连接是否连接了
 */
SocketApi.socketOpen = false


/**
 * @param {Object} userName
 * @param {Object} passWord
 * 连接websocket 设置事件监听器
 */
SocketApi.connectSocket = function (userName, passWord) {
  let loginSuccess = false
  if (!SocketApi.socketOpen) {
    SocketApi.socketTask = new WebSocket(config.imPath + '?username=' + userName + '&password=' + passWord)
    /**
     * 链接打开监听器
     */
    SocketApi.socketTask.addEventListener('open', function (e) {
      if (e.isTrusted) { // 说明连接打开来了
        console.log('open', JSON.stringify(e))
        SocketApi.onSocketOpen(e)
        SocketApi.socketOpen = true
        loginSuccess = true
      }
    })
    /**
     * 监听错误事件
     */
    SocketApi.socketTask.addEventListener('error', function (e) {
      SocketApi.onError(e)
    })

    /**
     * 监听链接关闭事件
     */
    SocketApi.socketTask.addEventListener('close', function (e) {
      console.log('close', JSON.stringify(e))
      SocketApi.onClose(e)
    })

    /**
     * 监听消息事件
     */
    SocketApi.socketTask.addEventListener('message', function (event) {
      console.log('Message from server ', event.data)
      const resp = JSON.parse(event.data)
      SocketApi.onSocketMessage(resp)
    })
    return loginSuccess
  }
}
/**
 * 连接成功后的消息队列
 */
SocketApi.socketMsgQueue = []
/**
 * 连接开启后的操作
 */
SocketApi.onSocketOpen = function () {
  console.log('WebSocket连接已打开！');
  SocketApi.socketOpen = true;
  for (let i = 0; i < SocketApi.socketMsgQueue.length; i++) {
    SocketApi.sendSocketMessage(SocketApi.socketMsgQueue[i]);
  }
  SocketApi.socketMsgQueue = []
}

/**
 * @param {Object} msg
 * 主动关闭im连接
 */
SocketApi.closeSocket = function () {
  SocketApi.socketTask.close()
  SocketApi.socketOpen = false
}

/**
 * @param {Object} res
 * 连接关闭后调用
 */
SocketApi.onClose = function (res) {
  SocketApi.socketOpen = false
  console.log('关闭连接成功：' + JSON.stringify(res));
}

/**
 * @param {Object} res
 * 连接关闭后调用
 */
SocketApi.onError = function (res) {
  console.log('连接错误：' + JSON.stringify(res));
}

/**
 * @param {Object} msg消息
 * 发送wb 消息
 */
SocketApi.sendSocketMessage = function (msg) {
  console.log(JSON.stringify("发送的消息为" + JSON.stringify(msg)))
  if (SocketApi.socketOpen) {
    SocketApi.socketTask.send(msg, function (res) {
      console.log("消息发送后的回调" + JSON.stringify(res))
    })
  } else {
    SocketApi.socketMsgQueue.push(msg);
  }
}
/**
 * @param {Object} msg
 * 监听WebSocket接受到服务器的消息事件
 *
 */
SocketApi.onSocketMessage = function (res) {
  console.log('收到服务器内容：' + JSON.stringify(res));
  /**
   * jim后台还不完善 先假处理 不想高了 等超哥后台好
   */
  /**
   * 登陆后提示加入群组成功
   */
  let msg = JSON.parse(res.data)
  switch(msg.code) {
    case ImEnum.common.IM_GROUP_IN://加入聊天室
      break;
    case ImEnum.common.IM_GROUP_EXIT://离开聊天室
      break;
    case ImEnum.common.IM_MSG_RECEIVED://收到消息
      break;
    case ImEnum.common.IM_GROUP_LIST://群组好友列表
      break;
    default:
      break;
  }

}

export default SocketApi
